Forum des exercices du projet Zuul

Exercice 7.35

  
 
Avatar Denis BUREAU
Exercice 7.35
par Denis BUREAU, vendredi 23 janvier 2015, 23:15
 
  1. Lire la suite du chapitre 7 [ci-joint] (si possible en anglais, sinon en français).

  2. Review the source code of the zuul-with-enums-v1 project to see how it uses the CommandWord type. The classes Command, CommandWords, Game and Parser have all been adapted from the zuul-better version to accommodate this change. Check that the program still works as you would expect.

La documentation du projet est et les sources sont dans le fichier ci-joint.

Incorporez cette nouvelle conception dans votre jeu, mais attention à ne pas perdre les acquis des exercices précédents.

Avatar Thibaut TRASSART
Re: Exercice 7.35
par Thibaut TRASSART, mardi 7 avril 2015, 10:17
 

Je rencontre une difficulté majeure lors de la l'implémentation des enum dans le jeu.

Dans UserInterface, la méthode actionPerformed() appelait interpretCommand() de GameEngine. interpretCommand() prenait un paramètre de type String. 

Mais maintenant que interpretCommand() prend un paramètre de type Command, je suis un peu perdu. 

Il faudrait que j'arrive à utiliser la méthode getActionCommand() pour récupérer une String qui serait la key d'un élement de la HashMap de ComandWords, mais je ne vois pas du tout comment le faire. Ajouter un attribut ComandWords à UserIterface ? Ce serait bizarre... 

[code supprimé pour ne pas influencer les futurs lecteurs]

(Modifié par Denis BUREAU. Écrit initialement le lundi 6 avril 2015, 19:55)
Avatar Denis BUREAU
Re: Exercice 7.35
par Denis BUREAU, mardi 7 avril 2015, 10:16
 

Votre jeu fonctionnait quand actionPerformed() fournissait une String à interpreteCommand() (String qui était généralement récupérée dans l'entryField).

Maintenant, vous devez fournir le bon objet Command à interpreteCommand() d'après la String tapée. Votre Parser actuel vous fournit une fonction pour cela ; il faut juste l'adapter pour qu'au lieu d'être une String, le premier attribut de Command soit le bon CommandWord d'après la String tapée (mais la nouvelle classe CommandWords fournit une fonction pour cela).

AVANT : entryField --String--> actionPerformed() --String--> interpreteCommand()

APRÈS : entryField --String--> actionPerformed() --String--> Parser --String--> CommandWords --CommandWord--> Parser --Command--> actionPerformed() --Command--> interpreteCommand()
Avatar Pauline LAVILLE
Re: Exercice 7.35
par Pauline LAVILLE, vendredi 24 avril 2015, 21:20
 

Bonjour monsieur,

Après avoir implémenté ce programme, j'ai une erreur dans la classe GameEngine :

public void interpretCommand(String commandLine) 

    {

        gui.println(commandLine);

        Command command = parser.getCommand(commandLine);

       [code supprimé pour ne pas influencer les futurs lecteurs]   

    }


Je ne comprends pas pourquoi j'ai une erreur ...

(Modifié par Denis BUREAU. Écrit initialement le vendredi 24 avril 2015, 15:42)

Avatar Denis BUREAU
Re: Exercice 7.35
par Denis BUREAU, vendredi 24 avril 2015, 21:24
 

Quelle erreur ???

Je suppose que vous n'avez pas répercuté toutes les modifications nécessaires dues au changement de type de la commande : on passe maintenant un CommandWord (qui est un enum) et non plus une String.

Il peut y avoir des changements dans GameEngine, Parser, CommandWords, ...

Avatar Paul GIOVANNINI
Re: Exercice 7.35
par Paul GIOVANNINI, mercredi 23 novembre 2016, 10:57
 

Bonjour, je rencontre un problème avec les enums:

J'ai effectué tous les changements demandé, mais il me reste un point noir à éclaircir et je ne vois pas comment...


Dans Userinterface, j'ai maintenant le code suivant:

 private void processCommand()
    {
        boolean vFinished = false;
        String vInput = entryField.getText();
        entryField.setText("");
        Command vCom = new Command(CommandWords.getCommand(vInput), ???);
        engine.interpretCommand(vCom);

}


Dans la 4 e ligne du corps de processCommand, je sais que je dois renvoyer une commande (donc un commandWord et une string), mon problème est que je ne vois pas comment récupérer de ma string "vInput" le second mot.

Par exemple en tapant :"aller Nord", je ne vois pas comment récupérer "Nord"...

Pouvez vous m'aidez s'il vous plaît?

Cordialement

Avatar Denis BUREAU
Re: Exercice 7.35
par Denis BUREAU, jeudi 24 novembre 2016, 18:04
 

Ce n'est pas le travail de UserInterface de construire l'objet Command : c'est le travail du Parser !
(ça tombe bien, il y a justement une méthode pour cela dans le Parser)

Et depuis zuul-with-images, c'est au GameEngine d’interpréter (en utilisant le Parser) la ligne saisie dans UserInterface.

En résumé, il ne fallait modifier ni UserInterface.processCommand ni GameEngine.interpretCommand.
(c'est le Parser qui a été adapté à l'apparition de l'énumération CommandWord)